/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {
  // 如果长度不同，直接返回false
  if (s.length !== t.length) return false;

  // 用于记录每个字符出现的次数
  const count = new Array(26).fill(0);

  // 遍历字符串s，统计每个字符出现的次数
  for (let i = 0; i < s.length; i++) {
    // 这里需要注意的是这个 charCodeAt 的函数的效果是一样的，和前面遇到过的代码
    // 这里可以讲一下这个 charCodeAt 函数的效果，就是一个字符串的转换成对应的数字的函数
    // i 就是需要前面的字符串需要转换的字符的下标，这个 'a'.charCodeAt(0) 就是将下标为 0
    // 的字符转换成数字，也就是将 a 这个字符串转换成对应的数字
    // 之前看到的是 char.charCodeAt(0) 也是这个道理。前面的其实是字符串。
    count[s.charCodeAt(i) - 'a'.charCodeAt(0)]++;
  }

  // 遍历字符串t，减少对应字符的计数
  for (let i = 0; i < t.length; i++) {
    const index = t.charCodeAt(i) - 'a'.charCodeAt(0);
    // 如果某个字符的计数已经为0，说明t中该字符过多
    if (count[index] === 0) return false;
    count[index]--;
  }

  // 所有字符计数都应为0，否则返回false
  return count.every(c => c === 0);
};